package com.aplink.generic.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import android.text.TextUtils;

import com.aplink.generic.constant.MasterConfigContant;

public class DateTimeUtils {
    public static String formatDateTime(final Date date) {
        final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(
                MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
        return dateFormatGmt.format(date);
    }

    public static long getCurrentDateTime() {
        final Calendar cal = Calendar.getInstance(TimeZone
                .getTimeZone(MasterConfigContant.TIME_ZONE));
        return cal.getTimeInMillis() / 1000L;
    }

    public static long getCurrentDateTime(final boolean isLocalTime) {
        if (isLocalTime) {
            final Calendar cal = Calendar.getInstance();
            return cal.getTimeInMillis() / 1000L;
        }
        return DateTimeUtils.getCurrentDateTime();
    }

    public static String getDateTime(final boolean isLocalTime,
            final long seconds, final String format) throws ParseException {
        final long milliseconds = seconds * 1000L;
        SimpleDateFormat dateFormatGmt = null;
        if (TextUtils.isEmpty(format)) {
            dateFormatGmt = new SimpleDateFormat(
                    MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
        } else {
            dateFormatGmt = new SimpleDateFormat(format, Locale.getDefault());
        }
        if (!isLocalTime) {
            dateFormatGmt.setTimeZone(TimeZone
                    .getTimeZone(MasterConfigContant.TIME_ZONE));
        }
        return dateFormatGmt.format(new Date(milliseconds));
    }

    public static String getDateTime(final long seconds) throws ParseException {
        return DateTimeUtils.getDateTime(seconds, null);
    }

    public static String getDateTime(final long seconds, final String format)
            throws ParseException {
        final long milliseconds = seconds * 1000L;
        SimpleDateFormat dateFormatGmt = null;
        if (TextUtils.isEmpty(format)) {
            dateFormatGmt = new SimpleDateFormat(
                    MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
        } else {
            dateFormatGmt = new SimpleDateFormat(format, Locale.getDefault());
        }
        dateFormatGmt.setTimeZone(TimeZone
                .getTimeZone(MasterConfigContant.TIME_ZONE));
        return dateFormatGmt.format(new Date(milliseconds));
    }

    public static long parse(final String datetime) throws ParseException {
        final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(
                MasterConfigContant.DATETIME_FORMAT, Locale.getDefault());
        dateFormatGmt.setTimeZone(TimeZone
                .getTimeZone(MasterConfigContant.TIME_ZONE));
        return dateFormatGmt.parse(datetime).getTime();
    }

    public static long parse(final String datetime, final String format)
            throws ParseException {
        final SimpleDateFormat dateFormatGmt = new SimpleDateFormat(format,
                Locale.getDefault());
        dateFormatGmt.setTimeZone(TimeZone
                .getTimeZone(MasterConfigContant.TIME_ZONE));
        return dateFormatGmt.parse(datetime).getTime();
    }

    private DateTimeUtils() {

    }
}
